package com.rr.service.impl;

import com.rr.entity.Module;
import com.rr.dao.ModuleDao;
import com.rr.service.ModuleService;
import jakarta.annotation.Resource;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;


/**
 * (Module)表服务实现类
 *
 * @author makejava
 * @since 2025-06-01 15:02:25
 */
@Service("moduleService")
public class ModuleServiceImpl implements ModuleService {
    @Resource
    private ModuleDao moduleDao;

    /**
     * 通过ID查询单条数据
     *
     * @param moduleId 主键
     * @return 实例对象
     */
    @Override
    public Module queryById(Integer moduleId) {
        return this.moduleDao.queryById(moduleId);
    }

    /**
     * 分页查询
     *
     * @param module      筛选条件
     * @param pageRequest 分页对象
     * @return 查询结果
     */


    /**
     * 新增数据
     *
     * @param module 实例对象
     * @return 实例对象
     */
    @Override
    public Module insert(Module module) {
        this.moduleDao.insert(module);
        return module;
    }

    /**
     * 修改数据
     *
     * @param module 实例对象
     * @return 实例对象
     */
    @Override
    public Module update(Module module) {
        this.moduleDao.update(module);
        return this.queryById(module.getModuleId());
    }

    /**
     * 通过主键删除数据
     *
     * @param moduleId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer moduleId) {
        return this.moduleDao.deleteById(moduleId) > 0;
    }
    /**
     * 根据权限获取菜单
     *
     */
    @Cacheable(  value = "queryModelByRoleId" ,key="#roleId"   )
    @Override
    public  List<Module> queryModelByRoleId(Integer roleId) {

        List<Module> modules = moduleDao.queryModelByRoleId(1);
        List<Module> oneList  = new ArrayList<>();
        //处理菜单 简写 后期还要改
        modules.forEach(module -> {
            if (module.getParentId() == null) {
                oneList.add(module);
                module.setChildren(new ArrayList<>());
            } else  {
                oneList.get(module.getParentId()-1).getChildren().add(module);
            }
        });
        return oneList;
    }

    @Override
    public List<Module> queryAllModule(Module module) {
        return moduleDao.queryAllModule(module);
    }
}
